package clases;

import java.util.Map;
import java.util.Set;

import tipos.Camino;

public class TableroPegaso {

	public static void main(String[] args) {
		Partida part = new Partida(new Integer(15), new Integer(15));
		Tablero tablero = part.getTablero();
		tablero.getCasilla(0, 0).setDigito(2);
		tablero.getCasilla(0, 2).setDigito(3);
		tablero.getCasilla(0, 4).setDigito(3);
		tablero.getCasilla(0, 6).setDigito(3);
		tablero.getCasilla(0, 8).setDigito(5);
		tablero.getCasilla(0, 11).setDigito(3);
		tablero.getCasilla(0, 13).setDigito(3);
		tablero.getCasilla(0, 14).setDigito(3);
		tablero.getCasilla(1, 0).setDigito(2);
		tablero.getCasilla(1, 5).setDigito(3);
		tablero.getCasilla(1, 6).setDigito(4);
		tablero.getCasilla(1, 7).setDigito(4);
		tablero.getCasilla(1, 9).setDigito(5);
		tablero.getCasilla(1, 12).setDigito(1);
		tablero.getCasilla(2, 3).setDigito(1);
		tablero.getCasilla(2, 9).setDigito(1);
		tablero.getCasilla(2, 11).setDigito(1);
		tablero.getCasilla(2, 14).setDigito(3);
		tablero.getCasilla(3, 0).setDigito(4);
		tablero.getCasilla(3, 1).setDigito(4);
		tablero.getCasilla(3, 4).setDigito(1);
		tablero.getCasilla(3, 7).setDigito(2);
		tablero.getCasilla(3, 8).setDigito(2);
		tablero.getCasilla(3, 10).setDigito(4);
		tablero.getCasilla(3, 13).setDigito(4);
		tablero.getCasilla(4, 0).setDigito(3);
		tablero.getCasilla(4, 2).setDigito(3);
		tablero.getCasilla(4, 5).setDigito(1);
		tablero.getCasilla(4, 7).setDigito(1);
		tablero.getCasilla(4, 11).setDigito(6);
		tablero.getCasilla(4, 14).setDigito(4);
		tablero.getCasilla(5, 0).setDigito(5);
		tablero.getCasilla(5, 4).setDigito(5);
		tablero.getCasilla(5, 8).setDigito(1);
		tablero.getCasilla(5, 10).setDigito(2);
		tablero.getCasilla(5, 12).setDigito(1);
		tablero.getCasilla(6, 2).setDigito(4);
		tablero.getCasilla(6, 5).setDigito(4);
		tablero.getCasilla(6, 10).setDigito(2);
		tablero.getCasilla(7, 0).setDigito(8);
		tablero.getCasilla(7, 3).setDigito(1);
		tablero.getCasilla(7, 14).setDigito(4);
		tablero.getCasilla(7, 11).setDigito(3);
		tablero.getCasilla(7, 9).setDigito(6);
		tablero.getCasilla(8, 1).setDigito(7);
		tablero.getCasilla(9, 2).setDigito(3);
		tablero.getCasilla(9, 13).setDigito(7);
		tablero.getCasilla(9, 11).setDigito(3);
		tablero.getCasilla(10, 13).setDigito(1);
		tablero.getCasilla(10, 14).setDigito(7);
		tablero.getCasilla(11, 2).setDigito(3);
		tablero.getCasilla(11, 5).setDigito(3);
		tablero.getCasilla(11, 7).setDigito(3);
		tablero.getCasilla(12, 4).setDigito(1);
		tablero.getCasilla(12, 8).setDigito(7);
		tablero.getCasilla(12, 10).setDigito(4);
		tablero.getCasilla(12, 11).setDigito(4);
		tablero.getCasilla(12, 14).setDigito(6);
		tablero.getCasilla(13, 3).setDigito(2);
		tablero.getCasilla(13, 5).setDigito(7);
		tablero.getCasilla(13, 14).setDigito(6);
		tablero.getCasilla(14, 0).setDigito(8);
		tablero.getCasilla(14, 1).setDigito(7);
		tablero.getCasilla(14, 3).setDigito(2);
		tablero.getCasilla(14, 7).setDigito(4);
		tablero.getCasilla(14, 8).setDigito(4);
		tablero.getCasilla(14, 11).setDigito(8);
		tablero.getCasilla(14, 14).setDigito(8);
		
		AlgoritmoResolucion algRes = new AlgoritmoResolucion(tablero);
		algRes.busquedaDeParejas();
		
		Integer i = 1;
		for (Pareja par : algRes.getParejasFijas()) {
			System.out.println("Pareja " + i + " CASILLA 1: columna: " + par.getCasilla1().getColumna() + " fila: " + par.getCasilla1().getFila() +
					" CASILLA 2: columna: " + par.getCasilla2().getColumna()+ " fila: " + par.getCasilla2().getFila());
			System.out.println("Digito de la pareja: " + par.getCasilla1().getDigito());
			i++;
		}
	
		Map<Casilla, Set<Casilla>> posiblesParejas = algRes.getPosiblesParejas();
		for (Casilla c : posiblesParejas.keySet()) {
			Integer y = 1;
			System.out.println("Las parejas posibles para la casilla Columna: " + c.getColumna() + " Fila: " + c.getFila() + " son:");
			for (Casilla cas : posiblesParejas.get(c)) {
				System.out.println("casilla " + y + " columna: " + cas.getColumna() + " fila: " + cas.getFila());
				y++;
			}
		}
		Integer k = 1;
		for (Pareja p : algRes.getParejasFijas()) {
			if (!(p.getCamino() == null)) {
				Camino c = p.getCamino();
				System.out.println("Camino " + k + ":");
				k++;
				Integer l = 1;
				for (Casilla casi : c.getRecorrido()) {
					System.out.println("Casilla " + l + " Columna: " + casi.getColumna() + " Fila: " + casi.getFila());
					l++;
				}
			}
		}
		
		Integer p = new Integer(1);
		for (Pareja par : algRes.getParejasPosibles()) {
			System.out.println("Pareja posible " + p + "___________________________________________________________________________________________");
			for (Camino cam : par.getCaminosPosibles()) {
				System.out.println("Camino :");
				Integer m = new Integer(1);
				for (Casilla cas : cam.getRecorrido()) {
					System.out.println("Casilla " + m + ", Fila " + cas.getFila() + " Columna " + cas.getColumna());
					m++;
				}
			}
			p++;
		}
		
		p = 1;
		for (Pareja par : algRes.getParejasSinCamino()) {
			Integer y = new Integer(1);
			if (par.getCamino() != null) {
				Camino c = par.getCamino();
				System.out.println("Camino " + y + ":");
				y++;
				Integer l = 1;
				for (Casilla casi : c.getRecorrido()) {
					System.out.println("Casilla " + l + " Columna: " + casi.getColumna() + " Fila: " + casi.getFila());
					l++;
				}
			} else {
				System.out.println("Pareja sin camino " + p + "___________________________________________________________________________________________");
				for (Camino cam : par.getCaminosPosibles()) {
					System.out.println("Camino " + y + ":");
					y++;
					Integer l = 1;
					for (Casilla cas : cam.getRecorrido()) {
						System.out.println("Casilla " + l + " Columna: " + cas.getColumna() + " Fila: " + cas.getFila());
						l++;
					}
				}
			}
			p++;
		}

	}
}
